أتقن الوصول إلى خدمات Google Cloud Platform (GCP) باستخدام مكتبة عميل Python. تعلم المصادقة، التفاعل مع الخدمات، وأفضل الممارسات لبناء تطبيقات سحابية قابلة للتوسع عالمياً.
فتح قوة Google Cloud Platform باستخدام Python: دليل شامل للوصول إلى خدمات GCP
توفر Google Cloud Platform (GCP) مجموعة واسعة من الخدمات لبناء ونشر تطبيقات قابلة للتوسع وموثوقة. يُعد Python، بفضل بنيته الواضحة ومكتباته الشاملة، خيارًا شائعًا للتفاعل مع GCP. يقدم هذا الدليل نظرة عامة شاملة حول كيفية استخدام مكتبة عميل Python للوصول إلى خدمات GCP وإدارتها، ويهدف إلى جمهور عالمي من خلفيات تقنية متنوعة.
لماذا نستخدم Python مع GCP؟
يوفر Python العديد من المزايا للتفاعل مع GCP:
- سهولة الاستخدام: تبسط بنية Python سهلة القراءة عملية التطوير، مما يسهل تعلم تطبيقات GCP وصيانتها.
- مكتبات شاملة: توفر Google مكتبة عميل Python جيدة الصيانة ومصممة خصيصًا لخدمات GCP.
- دعم مجتمعي قوي: يوفر مجتمع Python الكبير والنشط موارد ودروس تعليمية ودعمًا وفيرًا لتطوير GCP.
- الأتمتة والبرمجة النصية: يتفوق Python في أتمتة المهام وإدارة البنية التحتية عبر البرمجة النصية، وهو أمر بالغ الأهمية للبيئات السحابية.
- علم البيانات والتعلم الآلي: Python هو اللغة المفضلة لعلوم البيانات والتعلم الآلي، والذي يتكامل بسلاسة مع خدمات الذكاء الاصطناعي/التعلم الآلي من GCP.
إعداد بيئتك
قبل البدء، ستحتاج إلى إعداد بيئة Python الخاصة بك وتثبيت المكتبات الضرورية.
1. تثبيت Python و Pip
إذا لم يكن لديك Python مثبتًا، قم بتنزيل وتثبيت أحدث إصدار من موقع Python الرسمي (https://www.python.org/downloads/). عادةً ما يتم تضمين Pip، مثبت حزم Python، مع تثبيتات Python.
التحقق: افتح الطرفية أو موجه الأوامر الخاص بك وقم بتشغيل الأوامر التالية:
python --version
pip --version
يجب أن تعرض هذه الأوامر إصدارات Python و Pip المثبتة.
2. تثبيت مكتبة عميل Google Cloud لـ Python
توفر مكتبة `google-cloud-python` الوصول إلى جميع خدمات GCP. قم بتثبيتها باستخدام Pip:
pip install google-cloud-storage google-cloud-compute google-cloud-pubsub # Example - Install the storage, compute, and pubsub packages
قم بتثبيت مكتبات العميل المحددة فقط لخدمات GCP التي تنوي استخدامها. هذا يقلل من حجم تبعيات تطبيقك.
مثال (التخزين السحابي): لتثبيت مكتبة عميل التخزين السحابي:
pip install google-cloud-storage
3. تهيئة المصادقة
المصادقة حاسمة لمنح تطبيق Python الخاص بك إذن الوصول إلى موارد GCP. تتوفر عدة طرق للمصادقة:
- حسابات الخدمة: موصى بها للتطبيقات التي تعمل على GCP (مثل Compute Engine, Cloud Functions, Cloud Run).
- اعتمادات المستخدم: مناسبة للتطوير والاختبار المحلي.
استخدام حسابات الخدمة (موصى بها للإنتاج)
حسابات الخدمة هي حسابات غير بشرية يمكن استخدامها لمصادقة التطبيقات والخدمات. توفر طريقة آمنة ومتحكم بها لمنح الوصول إلى موارد GCP.
- إنشاء حساب خدمة: في Google Cloud Console، انتقل إلى IAM & Admin > Service Accounts وانقر على Create Service Account. قدم اسمًا ووصفًا لحساب خدمتك.
- منح الأذونات: قم بتعيين أدوار مناسبة لحساب خدمتك بناءً على موارد GCP التي يحتاج تطبيقك إلى الوصول إليها (على سبيل المثال، `roles/storage.objectAdmin` للتحكم الكامل في كائنات التخزين السحابي).
- تنزيل مفتاح حساب الخدمة: أنشئ ملف مفتاح JSON لحساب خدمتك وقم بتنزيله. تعامل مع ملف المفتاح هذا بحذر شديد، لأنه يمنح الوصول إلى موارد GCP الخاصة بك. قم بتخزينه بشكل آمن ولا تلتزم به أبدًا في التحكم بالإصدارات.
- تعيين متغير البيئة `GOOGLE_APPLICATION_CREDENTIALS`: عيّن متغير البيئة `GOOGLE_APPLICATION_CREDENTIALS` إلى مسار ملف مفتاح JSON الذي تم تنزيله.
مثال (Linux/macOS):
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"
مثال (Windows):
set GOOGLE_APPLICATION_CREDENTIALS=C:\path\to\your\service-account-key.json
ملاحظة أمنية هامة: تجنب ترميز مفتاح حساب الخدمة الخاص بك مباشرة في التعليمات البرمجية. يعد استخدام متغير البيئة `GOOGLE_APPLICATION_CREDENTIALS` هو النهج الموصى به للأمان وسهولة الصيانة.
استخدام اعتمادات المستخدم (للتطوير المحلي)
للتطوير والاختبار المحلي، يمكنك استخدام بيانات اعتماد مستخدم Google Cloud الخاصة بك.
- تثبيت Google Cloud SDK (gcloud): قم بتنزيل وتثبيت Google Cloud SDK من الموقع الرسمي (https://cloud.google.com/sdk/docs/install).
- المصادقة باستخدام gcloud: قم بتشغيل الأمر التالي في الطرفية أو موجه الأوامر الخاص بك:
gcloud auth application-default login
سيفتح هذا الأمر نافذة متصفح حيث يمكنك تسجيل الدخول إلى حساب Google Cloud الخاص بك ومنح الأذونات اللازمة لـ Google Cloud SDK.
الوصول إلى خدمات GCP باستخدام Python
بمجرد إعداد بيئتك وتهيئة المصادقة، يمكنك البدء في الوصول إلى خدمات GCP باستخدام مكتبة عميل Python. فيما يلي بعض الأمثلة:
1. التخزين السحابي (Cloud Storage)
يوفر التخزين السحابي تخزينًا كائنيًا قابلاً للتوسع ودائمًا. يمكنك استخدام مكتبة عميل Python لتحميل وتنزيل وإدارة الكائنات في مجموعات التخزين السحابي الخاصة بك.
مثال: تحميل ملف إلى التخزين السحابي
from google.cloud import storage
# Replace with your bucket name and file path
BUCKET_NAME = "your-bucket-name"
FILE_PATH = "/path/to/your/local/file.txt"
OBJECT_NAME = "remote/file.txt" # The name you want the file to have in Cloud Storage
client = storage.Client()
bucket = client.bucket(BUCKET_NAME)
blob = bucket.blob(OBJECT_NAME)
blob.upload_from_filename(FILE_PATH)
print(f"File {FILE_PATH} uploaded to gs://{BUCKET_NAME}/{OBJECT_NAME}.")
شرح:
- `from google.cloud import storage`: تستورد وحدة التخزين السحابي.
- `storage.Client()`: تنشئ كائن عميل التخزين السحابي، باستخدام بيانات اعتماد المصادقة التي تم تعيينها سابقًا.
- `client.bucket(BUCKET_NAME)`: تحصل على مرجع إلى مجموعة التخزين السحابي المحددة.
- `bucket.blob(OBJECT_NAME)`: تنشئ كائن blob (كائن) داخل المجموعة، بالاسم المحدد.
- `blob.upload_from_filename(FILE_PATH)`: تُحمّل الملف من المسار المحلي إلى كائن blob في التخزين السحابي.
مثال: تنزيل ملف من التخزين السحابي
from google.cloud import storage
# Replace with your bucket name, object name, and local file path
BUCKET_NAME = "your-bucket-name"
OBJECT_NAME = "remote/file.txt"
FILE_PATH = "/path/to/your/local/downloaded_file.txt"
client = storage.Client()
bucket = client.bucket(BUCKET_NAME)
blob = bucket.blob(OBJECT_NAME)
blob.download_to_filename(FILE_PATH)
print(f"File gs://{BUCKET_NAME}/{OBJECT_NAME} downloaded to {FILE_PATH}.")
2. محرك الحوسبة (Compute Engine)
يوفر Compute Engine الأجهزة الافتراضية (VMs) على GCP. يمكنك استخدام مكتبة عميل Python لإدارة نُسخ Compute Engine، بما في ذلك إنشائها وبدئها وإيقافها وحذفها.
مثال: سرد نُسخ Compute Engine
from google.cloud import compute_v1
# Replace with your project ID and zone
PROJECT_ID = "your-project-id"
ZONE = "us-central1-a"
client = compute_v1.InstancesClient()
request = compute_v1.ListInstancesRequest(
project=PROJECT_ID,
zone=ZONE
)
# Make the request
pager = client.list(request=request)
print("Instances in project and zone:")
# Handle the response
for response in pager:
print(response)
شرح:
- `from google.cloud import compute_v1`: تستورد وحدة Compute Engine (الإصدار v1). فكر في استخدام إصدار أحدث إذا كان متاحًا.
- `compute_v1.InstancesClient()`: تنشئ كائن عميل Compute Engine.
- `compute_v1.ListInstancesRequest()`: تنشئ طلبًا لسرد النُسخ في المشروع والمنطقة المحددين.
- `client.list(request=request)`: ترسل الطلب إلى واجهة برمجة تطبيقات Compute Engine.
- ثم يتكرر الكود خلال الاستجابة (كائن المُناداة) ويطبع معلومات حول كل نُسخة.
3. وظائف سحابية (Cloud Functions)
توفر Cloud Functions بيئات تنفيذ بدون خادم (serverless). يمكنك استخدام مكتبة عميل Python لنشر وإدارة وظائف سحابية.
مثال: نشر وظيفة سحابية (يتطلب Google Cloud SDK)
يتضمن نشر وظيفة سحابية غالبًا استخدام Google Cloud SDK (gcloud) مباشرة، على الرغم من أنه يمكن الوصول إلى واجهة برمجة تطبيقات Cloud Functions من خلال مكتبة عميل Python لسيناريوهات أكثر تعقيدًا. يوضح هذا المثال أمر نشر gcloud أساسيًا. قم أولاً بإنشاء ملفي main.py و requirements.txt:
main.py (مثال)
def hello_world(request):
return 'Hello, World!'
requirements.txt (مثال)
functions-framework
أمر النشر:
gcloud functions deploy your-function-name --runtime python310 --trigger-http --entry-point hello_world
شرح:
- `gcloud functions deploy your-function-name`: ينشر وظيفة سحابية بالاسم المحدد. استبدل `your-function-name` بالاسم المطلوب لوظيفتك.
- `--runtime python310`: يحدد بيئة تشغيل Python (على سبيل المثال، python310، python311). اختر بيئة تشغيل مدعومة.
- `--trigger-http`: يهيئ الوظيفة ليتم تشغيلها بواسطة طلبات HTTP.
- `--entry-point hello_world`: يحدد الوظيفة التي سيتم تنفيذها عند تشغيل الوظيفة. هذا يتوافق مع دالة `hello_world` المعرفة في `main.py`.
4. تشغيل سحابي (Cloud Run)
يمكّنك Cloud Run من نشر التطبيقات المعبأة في حاويات في بيئة بدون خادم. يمكنك إدارة خدمات Cloud Run باستخدام مكتبة عميل Python، ولكن النشر غالبًا ما يتم باستخدام Google Cloud SDK أو أدوات البنية التحتية كتعليمات برمجية مثل Terraform.
مثال: نشر خدمة Cloud Run (يتطلب Google Cloud SDK و Docker)
غالبًا ما تبدأ عمليات نشر Cloud Run بملف Dockerfile.
Dockerfile (مثال):
FROM python:3.10
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "--bind", "0.0.0.0:8080", "main:app"]
main.py (مثال) - تطبيق Flask بسيط
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "Hello from Cloud Run!"
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=8080)
requirements.txt (مثال):
flask
gunicorn
أوامر النشر:
# Build the Docker image
docker build -t gcr.io/your-project-id/cloud-run-image .
# Push the image to Google Container Registry
docker push gcr.io/your-project-id/cloud-run-image
# Deploy the Cloud Run service
gcloud run deploy your-cloud-run-service \
--image gcr.io/your-project-id/cloud-run-image \
--platform managed \
--region us-central1 \
--allow-unauthenticated
شرح:
- `docker build`: يبني صورة Docker من Dockerfile. استبدل `gcr.io/your-project-id/cloud-run-image` باسم الصورة المطلوب ومسار Google Container Registry.
- `docker push`: يدفع صورة Docker إلى Google Container Registry (GCR). يجب أن تكون قد قمت بتهيئة Docker للمصادقة مع GCR.
- `gcloud run deploy`: ينشر خدمة Cloud Run.
- `--image`: يحدد صورة Docker التي ستستخدم للخدمة.
- `--platform managed`: يحدد أن الخدمة يجب أن تُنشر على منصة Cloud Run المُدارة بالكامل.
- `--region`: يحدد المنطقة التي يجب أن تُنشر فيها الخدمة.
- `--allow-unauthenticated`: يسمح بالوصول غير المصادق عليه إلى الخدمة (لأغراض الاختبار). في بيئة إنتاج، يجب عليك تهيئة المصادقة المناسبة.
5. SQL سحابي (Cloud SQL)
يوفر Cloud SQL قواعد بيانات علائقية مُدارة على GCP. يمكنك استخدام مكتبة عميل Python (بالإضافة إلى مكتبات خاصة بقواعد البيانات مثل `psycopg2` لـ PostgreSQL أو `pymysql` لـ MySQL) للاتصال بنُسخ Cloud SQL وإدارتها.
مثال: الاتصال بنسخة Cloud SQL PostgreSQL
import psycopg2
# Replace with your Cloud SQL instance connection name, database name, username, and password
INSTANCE_CONNECTION_NAME = "your-project-id:your-region:your-instance-name"
DB_NAME = "your_database_name"
DB_USER = "your_username"
DB_PASS = "your_password"
try:
conn = psycopg2.connect(
f"host=/cloudsql/{INSTANCE_CONNECTION_NAME} dbname={DB_NAME} user={DB_USER} password={DB_PASS}"
)
print("Successfully connected to Cloud SQL!")
# Perform database operations here (e.g., execute queries)
cur = conn.cursor()
cur.execute("SELECT version();")
db_version = cur.fetchone()
print(f"Database version: {db_version}")
except Exception as e:
print(f"Error connecting to Cloud SQL: {e}")
finally:
if conn:
cur.close()
conn.close()
print("Connection closed.")
شرح:
- `import psycopg2`: تستورد مكتبة `psycopg2`، وهي محول PostgreSQL لـ Python. ستحتاج إلى تثبيتها باستخدام `pip install psycopg2-binary`.
- `INSTANCE_CONNECTION_NAME`: هذا هو معرف حاسم يحدد كيفية الاتصال بنسخة Cloud SQL الخاصة بك. يمكنك العثور على هذه القيمة في Google Cloud Console ضمن تفاصيل نسخة Cloud SQL الخاصة بك.
- تنشئ دالة `psycopg2.connect()` اتصالاً بقاعدة البيانات باستخدام المعلمات المقدمة.
- ثم ينفذ الكود استعلامًا بسيطًا لاسترداد إصدار قاعدة البيانات ويطبعه إلى وحدة التحكم.
- يضمن كتلة `finally` إغلاق اتصال قاعدة البيانات بشكل صحيح، حتى إذا حدثت أخطاء.
أفضل الممارسات لاستخدام Python مع GCP
فيما يلي بعض أفضل الممارسات التي يجب اتباعها عند تطوير تطبيقات GCP باستخدام Python:
- استخدام حسابات الخدمة: استخدم دائمًا حسابات الخدمة للمصادقة، خاصة في بيئات الإنتاج. امنحها الأذونات الضرورية فقط (مبدأ أقل امتياز).
- إدارة التبعيات: استخدم ملف `requirements.txt` لإدارة تبعيات تطبيقك. هذا يضمن عمليات نشر متسقة ويبسط إدارة التبعيات.
- معالجة الأخطاء: طبق معالجة أخطاء مناسبة للتعامل مع الاستثناءات بأناقة ومنع تعطل التطبيق. استخدم كتل try-except لالتقاط الأخطاء المحتملة وتسجيلها لتصحيح الأخطاء.
- تسجيل الفعال: استخدم خدمة Cloud Logging من GCP لتسجيل أحداث وأخطاء التطبيق. يوفر هذا رؤى قيمة حول سلوك تطبيقك ويساعد في استكشاف الأخطاء وإصلاحها.
- استخدام متغيرات البيئة: قم بتخزين المعلومات الحساسة، مثل مفاتيح API وبيانات اعتماد قاعدة البيانات، في متغيرات البيئة. هذا يمنع ترميزها الثابت في التعليمات البرمجية الخاصة بك ويحسن الأمان.
- التحسين للأداء: استخدم التخزين المؤقت، العمليات غير المتزامنة، وتقنيات التحسين الأخرى لتحسين أداء تطبيقات GCP الخاصة بك. فكر في استخدام خدمات GCP مثل Cloud CDN لتسليم المحتوى.
- مراقبة تطبيقاتك: استخدم خدمة Cloud Monitoring من GCP لمراقبة صحة وأداء تطبيقاتك. قم بإعداد تنبيهات ليتم إعلامك بأي مشاكل.
- أتمتة عمليات النشر: استخدم أدوات البنية التحتية كتعليمات برمجية مثل Terraform أو مسارات النشر لأتمتة عملية النشر. هذا يضمن عمليات نشر متسقة وقابلة للتكرار.
- اختر خدمة GCP المناسبة: حدد خدمة GCP المناسبة لاحتياجات تطبيقك. ضع في اعتبارك عوامل مثل قابلية التوسع، التكلفة، والتعقيد التشغيلي. على سبيل المثال، تعتبر Cloud Functions مناسبة جيدًا للمهام التي تعتمد على الأحداث، بينما يعتبر Cloud Run مثاليًا لنشر التطبيقات المعبأة في حاويات.
- تنظيف الموارد: تذكر تنظيف أي موارد GCP غير مستخدمة لتجنب تكبد تكاليف غير ضرورية.
- تحديث المكتبات باستمرار: قم بتحديث مكتبات Python الخاصة بك بانتظام للاستفادة من إصلاحات الأخطاء والتصحيحات الأمنية والميزات الجديدة. استخدم `pip` لتحديث حزمك: `pip install --upgrade <package-name>`.
- استخدام البيئات الافتراضية: أنشئ بيئات افتراضية لكل مشروع لعزل التبعيات وتجنب التعارضات بين المشاريع المختلفة.
اعتبارات عالمية
عند تطوير تطبيقات GCP لجمهور عالمي، ضع في اعتبارك ما يلي:
- إقامة البيانات: افهم متطلبات إقامة البيانات للمناطق المستهدفة. اختر مناطق GCP التي تتوافق مع هذه المتطلبات.
- الكمون: قلل الكمون عن طريق نشر تطبيقاتك في مناطق قريبة جغرافيًا من مستخدميك.
- التعريب: قم بتعريب واجهة المستخدم ومحتوى تطبيقك للغات والمناطق المختلفة.
- العملة ومعالجة الدفع: إذا كان تطبيقك يتضمن معاملات مالية، فتأكد من دعم العملات وطرق الدفع المستخدمة في مناطقك المستهدفة.
- الامتثال القانوني والتنظيمي: كن على دراية بالمتطلبات القانونية والتنظيمية في مناطقك المستهدفة، مثل قوانين خصوصية البيانات (مثل GDPR) وضوابط التصدير.
- المناطق الزمنية: تعامل مع المناطق الزمنية بشكل صحيح لضمان عرض تطبيقك للتواريخ والأوقات بدقة للمستخدمين في مواقع مختلفة. استخدم مكتبات مثل `pytz` لإدارة تحويلات المناطق الزمنية.
- الحساسية الثقافية: كن مدركًا للاختلافات الثقافية عند تصميم واجهة المستخدم ومحتوى تطبيقك.
استكشاف المشكلات الشائعة وإصلاحها
فيما يلي بعض المشكلات الشائعة التي قد تواجهها عند استخدام Python مع GCP وكيفية استكشافها وإصلاحها:
- أخطاء المصادقة: تحقق من أن ملف مفتاح حساب الخدمة الخاص بك صالح وأن متغير البيئة `GOOGLE_APPLICATION_CREDENTIALS` مضبوط بشكل صحيح. تأكد أيضًا من أن حساب الخدمة لديه الأذونات اللازمة للوصول إلى موارد GCP.
- أخطاء رفض الإذن: تحقق مرة أخرى من أدوار IAM المعينة لحساب الخدمة أو حساب المستخدم الخاص بك. تأكد من أن لديهم الأذونات المطلوبة للعملية التي تحاول تنفيذها.
- أخطاء الاستيراد: تحقق من تثبيت مكتبات Python الضرورية باستخدام `pip`. تأكد من أن أسماء المكتبات صحيحة وأنك تستخدم الإصدار الصحيح.
- مشاكل الاتصال بالشبكة: إذا كنت تشغل تطبيقك على نسخة VM، فتأكد من أن النسخة لديها اتصال بالشبكة بالإنترنت وخدمات GCP التي تحاول الوصول إليها. تحقق من قواعد جدار الحماية وتكوين الشبكة.
- حدود معدل API: تحتوي واجهات برمجة تطبيقات GCP على حدود معدل لمنع الإساءة. إذا تجاوزت حدود المعدل، فقد تواجه أخطاء. قم بتطبيق التراجع الأسي (exponential backoff) أو التخزين المؤقت لتقليل عدد مكالمات API.
الخاتمة
يوفر Python ومنصة Google Cloud Platform مزيجًا قويًا لبناء ونشر تطبيقات قابلة للتوسع، موثوقة، ويمكن الوصول إليها عالميًا. باتباع الإرشادات وأفضل الممارسات الموضحة في هذا الدليل، يمكنك الاستفادة بفعالية من مكتبة عميل Python للوصول إلى خدمات GCP وإدارتها، مما يمكّنك من إنشاء حلول مبتكرة لجمهور عالمي.
تذكر دائمًا إعطاء الأولوية للأمان، وتحسين الأداء، والنظر في الآثار العالمية لتطبيقاتك. التعلم المستمر والتجريب هما المفتاح لإتقان فن تطوير السحابة باستخدام Python على GCP.